SQL dotaz na neurcite tbl. v MSSQL2000

Otázka od: Miso

23. 6. 2004 15:20

Zdar,

Mam TblA, kde je nejaky stlpec Catalog, v ktorom su nazvy katalogov, potom
mam stlpec TblName, kde su nazvy tabuliek, tabulka TblA ma TblA_ID..
..su v nej teda udaje napr.

nejake ID, 'Catalog1', 'TblXX'
nejake ID, 'Catalog1', 'TblXY'... atd..

..kazda z tychto tabuliek 'TblX...' ma ID stlpec s rovnakym nazvom, napr.
FldX_ID

..potom mam MainTbl, kde su stlpce

MainTbl_Id, FldX_ID, TblA_ID

..ja chcem, aby som na zaklade hodnoty TblA_ID vedel pristupit k urcitej
tabulke a potom na zaklade hodnoty FldX_ID vedel pristupit k jednotlivym
stlpcom daneho zaznamu tabulky TblX...

..skusal som nieco ako :

select * from MainTbl as M
left join TblA as A on A.TblA_ID = M.TblA_ID
--- a tu dalej neviem..nieco ako :
left join (exec ('select * from ['+A.Catalog+']..['+A.TblName+']')) as t on
t.FldX_ID = M.FldX_ID
----ale to samozrejme nefunguje

..dufam, ze som sa vyjadril aspon trochu zrozumitelne..
...je toto mozne nejako riesit?

dik,
Miso


Odpovedá: Martin Cajbik

23. 6. 2004 16:20

Zdravim,
jedina moznost bude zrejme pouzit kurzor nad MainTbl, v nom spustat zapis
udajov z "neurcitych tabuliek" do temporary tabulky a nakoniec selectnut
zaznamy z tej temporary tabulky. Nie je mi vsak jasne aky ucel ma takato
komplikovana struktura tabuliek, nie je mozne tuto strukturu zaznamov ulozit
v jednej databaze a jednej tabulke ?

Martin Cajbik

> Zdar,
>
> Mam TblA, kde je nejaky stlpec Catalog, v ktorom su nazvy katalogov, potom
> mam stlpec TblName, kde su nazvy tabuliek, tabulka TblA ma TblA_ID..
> ..su v nej teda udaje napr.
>
> nejake ID, 'Catalog1', 'TblXX'
> nejake ID, 'Catalog1', 'TblXY'... atd..
>
> ..kazda z tychto tabuliek 'TblX...' ma ID stlpec s rovnakym nazvom, napr.
> FldX_ID
>
> ..potom mam MainTbl, kde su stlpce
>
> MainTbl_Id, FldX_ID, TblA_ID
>
> ..ja chcem, aby som na zaklade hodnoty TblA_ID vedel pristupit k urcitej
> tabulke a potom na zaklade hodnoty FldX_ID vedel pristupit k jednotlivym
> stlpcom daneho zaznamu tabulky TblX...
>
> ..skusal som nieco ako :
>
> select * from MainTbl as M
> left join TblA as A on A.TblA_ID = M.TblA_ID
> --- a tu dalej neviem..nieco ako :
> left join (exec ('select * from ['+A.Catalog+']..['+A.TblName+']')) as t
on
> t.FldX_ID = M.FldX_ID
> ----ale to samozrejme nefunguje
>
> ..dufam, ze som sa vyjadril aspon trochu zrozumitelne..
> ...je toto mozne nejako riesit?
>
> dik,
> Miso


Odpovedá: Miso

24. 6. 2004 7:57

----- Original Message -----

> Zdravim,
> jedina moznost bude zrejme pouzit kurzor nad MainTbl, v nom spustat zapis
> udajov z "neurcitych tabuliek" do temporary tabulky a nakoniec selectnut
> zaznamy z tej temporary tabulky. Nie je mi vsak jasne aky ucel ma takato
> komplikovana struktura tabuliek, nie je mozne tuto strukturu zaznamov
ulozit
> v jednej databaze a jednej tabulke ?
>


..zmysel je asi taky, ze existuje nejaka zakladna struktura urciteho typu
tabulky, ktora ma napr. 10 stlpcov..kazda tabulka ma vsak okrem tychto
zakladnych 10 stlpcov aj dalsie odlisne stlpce, takze nemalo by zmysel
vytvorit jednu tbl. s napr. 50 stlpcami, kde by 10 stlpcov urcite pouzivali
vsetky tbl. a zvysne stlpce len niektore..

Miso


Odpovedá: Martin Cajbik

24. 6. 2004 8:40

Zdravim,
nieco podobne obvykle riesime rozdelenim dat na samostatnu tabulku so
spolocnymi stlpcami a dalsie tabulky obsahujuce iba tie specificke+odkaz do
spolocnej tabulky. Funkcnost pracujuca iba nad spolocnymi stlpcami je tym
podstatne jednoduchsia a funkcnosti nad specifickymi stlpcami su iba o nieco
zlozitejsie. A pokial pritom pouzijes ulozene procedury alebo view tak sa to
rozdelenie navonok ani neprejavi. Naviac pri pridani dalsej specifickej
tabulky bude potrebne dorobit iba tu specificku funkcnost a spolocna moze
ostat prakticky bez zmeny.

Martin Cajbik

> ..zmysel je asi taky, ze existuje nejaka zakladna struktura urciteho typu
> tabulky, ktora ma napr. 10 stlpcov..kazda tabulka ma vsak okrem tychto
> zakladnych 10 stlpcov aj dalsie odlisne stlpce, takze nemalo by zmysel
> vytvorit jednu tbl. s napr. 50 stlpcami, kde by 10 stlpcov urcite
pouzivali
> vsetky tbl. a zvysne stlpce len niektore..
>
> Miso


Odpovedá: Miso

24. 6. 2004 9:22

----- Original Message -----
> Zdravim,
> nieco podobne obvykle riesime rozdelenim dat na samostatnu tabulku so
> spolocnymi stlpcami a dalsie tabulky obsahujuce iba tie specificke+odkaz
do
> spolocnej tabulky. Funkcnost pracujuca iba nad spolocnymi stlpcami je tym
> podstatne jednoduchsia a funkcnosti nad specifickymi stlpcami su iba o
nieco
> zlozitejsie. A pokial pritom pouzijes ulozene procedury alebo view tak sa
to
> rozdelenie navonok ani neprejavi. Naviac pri pridani dalsej specifickej
> tabulky bude potrebne dorobit iba tu specificku funkcnost a spolocna moze
> ostat prakticky bez zmeny.

...no pre mna teraz nie je podstatne ake su alternativne moznosti DB navrhu,
skor som chcel pomoct s riesenim mojho problemu s uz existujucim DB
navrhom..kazdopadne vdaka za napad s TmpDB..mozno to takto skusim...napada
este niekoho nieco?

Miso


Odpovedá: Lstiburek Pavel

24. 6. 2004 14:03

1. No moznosti je slozit si ten dotaz do stringu a spustit pomoci EXEC

2. pokud se nemeni pocet sloupcu a jejich typ muzes pouzit UDF

Jinak tento navrh je jiz mimo relacni schema, takze pokud mas pocit, ze
to server moc nepodporuje tak se nemylis.

Pavel

> From: Miso [mailto:delphinpp@atlas.cz]
> ----- Original Message -----
> > Zdravim,
> > nieco podobne obvykle riesime rozdelenim dat na samostatnu
> tabulku so
> > spolocnymi stlpcami a dalsie tabulky obsahujuce iba tie
> specificke+odkaz
> do
> > spolocnej tabulky. Funkcnost pracujuca iba nad spolocnymi
> stlpcami je tym
> > podstatne jednoduchsia a funkcnosti nad specifickymi
> stlpcami su iba o
> nieco
> > zlozitejsie. A pokial pritom pouzijes ulozene procedury
> alebo view tak sa
> to
> > rozdelenie navonok ani neprejavi. Naviac pri pridani dalsej
> specifickej
> > tabulky bude potrebne dorobit iba tu specificku funkcnost a
> spolocna moze
> > ostat prakticky bez zmeny.
>
> ...no pre mna teraz nie je podstatne ake su alternativne
> moznosti DB navrhu,
> skor som chcel pomoct s riesenim mojho problemu s uz existujucim DB
> navrhom..kazdopadne vdaka za napad s TmpDB..mozno to takto
> skusim...napada
> este niekoho nieco?
>
> Miso